<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="daIag" id="daIag"><span data-lake-id="u2fdfb636" id="u2fdfb636">典型回答</span></h1>
  <p data-lake-id="u3df4844a" id="u3df4844a"><br></p>
  <p data-lake-id="ua4262aa8" id="ua4262aa8"><span data-lake-id="ub1a5603b" id="ub1a5603b">Redis 的内存淘汰策略用于在内存满了之后，决定哪些 key 要被删除。Redis 支持多种内存淘汰策略，可以通过配置文件中的 maxmemory-policy 参数来指定。</span></p>
  <p data-lake-id="u09f9ff04" id="u09f9ff04"><span data-lake-id="u546e43d9" id="u546e43d9">​</span><br></p>
  <p data-lake-id="u2b4af1df" id="u2b4af1df"><span data-lake-id="u680f6fed" id="u680f6fed">以下是 Redis 支持的内存淘汰策略：</span></p>
  <ul list="ub718353e">
   <li fid="u6709383c" data-lake-id="uc4fa94a0" id="uc4fa94a0"><span data-lake-id="uafc0aec2" id="uafc0aec2">noeviction：不会淘汰任何键值对，而是直接返回错误信息。</span></li>
   <li fid="u6709383c" data-lake-id="u224d8268" id="u224d8268"><span data-lake-id="u530c44be" id="u530c44be">allkeys-lru：从所有 key 中选择最近最少使用的那个 key 并删除。</span></li>
   <li fid="u6709383c" data-lake-id="u20a36b34" id="u20a36b34"><span data-lake-id="u752d83d4" id="u752d83d4">volatile-lru：从设置了过期时间的 key 中选择最近最少使用的那个 key 并删除。</span></li>
   <li fid="u6709383c" data-lake-id="u840e2f57" id="u840e2f57"><span data-lake-id="uc2f9038d" id="uc2f9038d">allkeys-random：从所有 key 中随机选择一个 key 并删除。</span></li>
   <li fid="u6709383c" data-lake-id="uffcf201f" id="uffcf201f"><span data-lake-id="u5178b8f7" id="u5178b8f7">volatile-random：从设置了过期时间的 key 中随机选择一个 key 并删除。</span></li>
   <li fid="u6709383c" data-lake-id="ufc973587" id="ufc973587"><span data-lake-id="u4288cdf1" id="u4288cdf1">volatile-ttl：从设置了过期时间的 key 中选择剩余时间最短的 key 并删除。</span></li>
   <li fid="u6709383c" data-lake-id="uae463b8d" id="uae463b8d"><span data-lake-id="u5602b2cf" id="u5602b2cf"> volatile-lfu：淘汰的对象是带有过期时间的键值对中，访问频率最低的那个。</span></li>
   <li fid="u6709383c" data-lake-id="u5ee861af" id="u5ee861af"><span data-lake-id="uc6ce3ee5" id="uc6ce3ee5">allkeys-lfu：淘汰的对象则是所有键值对中，访问频率最低的那个。</span></li>
  </ul>
  <p data-lake-id="u20ffe4f7" id="u20ffe4f7"><span data-lake-id="ub9ccaf40" id="ub9ccaf40">​</span><br></p>
  <h1 data-lake-id="ewIE7" id="ewIE7"><span data-lake-id="u2fb14134" id="u2fb14134">扩展知识</span></h1>
  <p data-lake-id="u1533b1aa" id="u1533b1aa"><br></p>
  <h2 data-lake-id="VGi9y" id="VGi9y"><span data-lake-id="u0fd21820" id="u0fd21820">如何选择</span></h2>
  <p data-lake-id="u9d692f23" id="u9d692f23"><br></p>
  <p data-lake-id="u071f2404" id="u071f2404"><span data-lake-id="uc5291e36" id="uc5291e36">以下是腾讯针对Redis的淘汰策略设置给出的建议：</span></p>
  <p data-lake-id="ude83f3cc" id="ude83f3cc"><span data-lake-id="u8e739a26" id="u8e739a26">​</span><br></p>
  <ul list="u45703f7a">
   <li fid="uf244610e" data-lake-id="u0f49bf1a" id="u0f49bf1a"><strong><span data-lake-id="ueccebb20" id="ueccebb20">当 Redis 作为缓存使用的时候，推荐使用 allkeys-lru 淘汰策略。该策略会将最近最少使用的 Key 淘汰。默认情况下，使用频率最低则后期命中的概率也最低，所以将其淘汰。</span></strong></li>
  </ul>
  <p data-lake-id="u04ffd893" id="u04ffd893"><strong><span data-lake-id="u79d42471" id="u79d42471">​</span></strong><br></p>
  <ul list="u187d3ef6">
   <li fid="ud7678887" data-lake-id="u6438b11a" id="u6438b11a"><strong><span data-lake-id="ueee95afc" id="ueee95afc">当 Redis 作为半缓存半持久化使用时，可以使用 volatile-lru。但因为 Redis 本身不建议保存持久化数据，所以只作为备选方案。</span></strong></li>
  </ul>
  <p data-lake-id="uaeaac129" id="uaeaac129"><br></p>
  <p data-lake-id="u5d0afd23" id="u5d0afd23"><span data-lake-id="ud299296a" id="ud299296a">阿里云Redis默认是volatile-lru （</span><a href="https://www.alibabacloud.com/help/zh/redis/user-guide/how-does-apsaradb-for-redis-evict-data-by-default" target="_blank" data-lake-id="u8be2939b" id="u8be2939b"><span data-lake-id="u51425e70" id="u51425e70">https://www.alibabacloud.com/help/zh/redis/user-guide/how-does-apsaradb-for-redis-evict-data-by-default</span></a><span data-lake-id="ud7180e33" id="ud7180e33"> ）</span></p>
  <p data-lake-id="ud4574515" id="ud4574515"><span data-lake-id="u28324990" id="u28324990" class="lake-fontsize-11" style="color: rgb(24, 24, 24)">​</span><br></p>
  <p data-lake-id="u4115130e" id="u4115130e"><span data-lake-id="u916e95f6" id="u916e95f6">腾讯云默认是noeviction，即不删除键。在内存占满后会出现 OOM 问题，所以建议创建好实例后修改淘汰策略，减少 OOM 问题的出现。（</span><a href="https://cloud.tencent.com/document/product/239/90960" target="_blank" data-lake-id="ua8b9ba5c" id="ua8b9ba5c"><span data-lake-id="u6fd8b2b0" id="u6fd8b2b0">https://cloud.tencent.com/document/product/239/90960</span></a><span data-lake-id="ua2e6174c" id="ua2e6174c"> ）</span></p>
  <p data-lake-id="ubf2e111e" id="ubf2e111e"><br></p>
  <p data-lake-id="ufbf9c55a" id="ufbf9c55a"><br></p>
 </body>
</html>